﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>


////编写一个函数实现n的k次方，使用递归实现
//int test(int x, int y)
//{
//	int i = 0;
//	int sum = 1;
//	if (y > 0)
//		return x * test(x, y - 1);
//	else
//		return 1;
//}
//
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d %d", &n, &k);
//
//	int ret = test(n, k);
//	printf("%d", ret);
//
//	return 0;
//}


////计算一个正整数的每位之和（递归实现）
//int DigitSum(int x)
//{
//	//1234
//	//4+（123）
//	//
//	int sum = 0;
//	if (x > 9)
//	{
//		sum = x % 10;
//		return sum + DigitSum(x / 10);
//	}
//	else
//		return x;
//}
//
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//
//	int ret = DigitSum(a);
//	printf("%d", ret);
//
//	return 0;
//}


////递归和非递归实现strlen
////①非递归
//int my_strlen(char* string)
//{
//	int i = 0;
//	for (i = 0; string[i] != '\0'; i++);
//
//	return i;
//}
//
//int main()
//{
//
//	char arr[] = "abcde";
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//
//	return 0;
//}
//
////②递归实现
//int my_strlen(char* string)
//{
//	if (*string != '\0')
//		return 1 + my_strlen(string + 1);
//
//	return 0;
//}
//
//
//int main()
//{
//
//	char arr[] = "abcde";
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//
//	return 0;
//}


////计算1~n的求和,用递归
//long int Get_sum(int x) {
//    if (x > 1)
//    {
//        return x + Get_sum(x - 1);
//    }
//
//    return 1;
//}
//
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//
//    long int ret = Get_sum(n);
//    printf("%ld", ret);
//
//    return 0;
//}


////输入数字N，然后输入N个数，计算这N个数的和，用递归实现
//int Get_sum(int x)
//{
//	if (x != 0)
//	{
//		int a = 0;
//		scanf("%d ", &a);
//		return a + Get_sum(x - 1);
//	}
//
//	return 0;
//}
//
//
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//
//	int ret = Get_sum(n);
//	printf("%d", ret);
//
//	return 0;
//}


////递归和非递归求第n个斐波那契数
////①非递归
//int Get_number(int n)
//{
//	int a = 1;
//	int b = 1;
//	int sum = 0;
//	int i = 0;
//
//	if (n < 3)
//	{
//		return 1;
//	}
//	else
//	{
//		for (i = 2; i < n; i++)
//		{
//			sum = a + b;
//			if (a < b)
//				a = sum;
//			else
//				b = sum;
//		}
//		return sum;
//	}
//
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//
//	int ret = Get_number(n);
//	printf("%d", ret);
//
//	return 0;
//}
//
////②递归算法
//int Get_sum(int n)
//{
//	if (n < 3)
//		return 1;
//	else
//	{
//		return Get_sum(n - 1) + Get_sum(n - 2);
//	}
//
//
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//
//	int ret = Get_sum(n);
//	printf("%d", ret);
//
//	return 0;
//}


////字符串逆序（递归实现）--没能写出来,借鉴版
//void reverse_string(char* arr)
//{
//	int len = strlen(arr);
//	char tmp = *arr;
//	*arr = *(arr + len - 1);
//
//	*(arr + len - 1) = '\0';
//	if (strlen(arr + 1) >= 2)
//		reverse_string(arr + 1);
//
//	*(arr + len - 1) = tmp; //后赋值
//}
//
//int main()
//{
//	char arr[] = "abcdef";
//
//	reverse_string(arr);
//	for (i = 0; i < ; i++)
//	{
//		printf("%c", arr[i]);
//	}
//
//	return 0;
//}





